/* POUR AJOUTER UN TRAITEMENT:
  * - nouvelle constante
  * - nouvelles methodes suivant besoin (press, move, release)
  */

#ifndef ECOUTEURSOURISGRAPHICSVIEW_H
#define ECOUTEURSOURISGRAPHICSVIEW_H

#include <QtGui>
#include <iostream>
#include "calque.h"
#include "matrices.h"

class FenetreImage;

class EcouteurSourisGraphicsView :
        QObject
{
    Q_OBJECT

private:
    int modeDeTraitement;
    FenetreImage * fenetreImage;
    Calque * imageCourante;

    // memoire de depart de click
    int xDep, yDep;

    // determine si on est en dragging -> (apres press, avant release)
    bool dragging;

    // 1 - pipette
    void actionMovePipette(int x, int y);
    void actionReleasePipette(QPoint* event);

    // 2 - fusion
    void actionPressFusion(QPoint* event);
    void actionDragFusion(QPoint* event);
    void actionReleaseFusion(QPoint* event);

    // 3 - crop
    void actionPressCrop(QPoint* event, QString titre);
    void actionDragCrop(QPoint* event);
    void actionReleaseCrop(QPoint* event);

    // 4 - crayon
    void actionPressCrayon(QPoint* event);
    void actionDragCrayon(QPoint* event);
    void actionReleaseCrayon(QPoint* event);

    // 5 - deplacement
    void actionPressDeplacement(QPoint* event);
    void actionDragDeplacement(QPoint* event);
    void actionReleaseDeplacement();

    // 6 - ciseaux intelligents
    void actionReleaseCiseaux(QPoint* event);
    static void ciseauxAnnexe(Calque * image, Matrices * marques, Matrices * selection, int i, int j, QRgb couleurDepart, int n=0);
    static bool isConcordant(QRgb couleurDepart, QRgb couleurATestee);
    static void dessineCiseaux(Calque * image, Matrices * marques, Matrices * selection, int i, int j, bool noir);

    // 7 - selection rectangulaire
    void actionReleaseSelRect(QPoint* event);

public:
    static const int NO_ACTION  = 0;
    static const int PIPETTE    = 1;
    static const int FUSION     = 2;
    static const int CROP       = 3;
    static const int CRAYON     = 4;
    static const int DEPLACEMENT= 5;
    static const int CISEAUX    = 6;
    static const int SELRECT    = 7;

    explicit EcouteurSourisGraphicsView(QWidget * fenetre);

    ~EcouteurSourisGraphicsView();

    void setMode(int mode);

private slots:
    void traitementPress(QPoint event);
    void traitementMoveAndDrag(QPoint event);
    void traitementRelease(QPoint event);
};

#endif // ECOUTEURSOURISGRAPHICSVIEW_H
